package cn.kgc.springday02.annotations;

import java.lang.annotation.*;

/**
 * @Author: 课工场
 * @Version: v1.0  2023/6/12
 * @Description:
 * 注解： 含有一定意义的标记    需要配合反射进行解析  独立使用注解没有意义
 * 分类：
 *      1.jdk中提供的注解    重写  重载
 *      2.元注解  修饰注解的注解
 *         @Target  标识注解能使用的位置
 *                  ElementType[] value();  注解属性
 *                  ElementType  枚举类型
 *                    TYPE    标识注解可以使用在类上
 *                    FIELD   标识注解可以使用属性上
 *                    METHOD  标识注解可以使用在方法上
 *                    PARAMETER   标识注解可以使用在参数上
 *        @Retention  标识注解生命周期
 *              RetentionPolicy value()
 *               SOURCE     源码有效
 *               CLASS      字节码有效
 *               RUNTIME    运行时有效
 *       @Inherited  标识注解是否可被继承
 *       @Documented  标识注解是否在api文档中生成
 *      3.自定义注解
 *       @interface
 *       注解属性
 *          注解属性的名字如果是 value  那么在使用注解赋值时可以省略value不写
 *          一旦定义了属性 必须赋值 不赋值报错 可以通过设置默认值解决
 *       属性类型:
 *       八种基本类型   String  枚举 以及以上数据类型的数组类型 注解类型
 *
 */
@Target(value ={ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Component {
    //  自定义注解属性
    //String description();
    //String value();   必须赋值
    String value() default "";  //  设置默认值
}
